package main

import (
	"fmt"
)

func main() {
	// var arr1 []int
	// fmt.Printf("%v--%T--%d\n",arr1,arr1,len(arr1))
	// 声明切片
	// 初始化切片
	// 扩容的方式 append
	// var arr2 =[]int{1,2,3,4}
	// fmt.Printf("%v--%T--%d",arr2,arr2,len(arr2))
	// var arr2 =[]int{1:1,2:6,3:8,4:8}
	// fmt.Printf("%v--%T--%d",arr2,arr2,len(arr2))
	// make()

	// 
	// var arr1 []int 
	// fmt.Println(arr1 == nil)  //golang中声明切片,切片的默认值就是nil
	// // 切片的循环遍历
	// var strSlice=[]string{"php","java","golang"}
	// for i:=0;i<len(strSlice);i++{
	// 	fmt.Println(strSlice[i])
	// }

	// var strSlice=[]string{"php","java","node,js"}
	// for i:=0;i<len(strSlice);i++{
	// 	fmt.Printf(strSlice[i])
	// }
	// 基于数组定义切片
	// a:=[5]int{55,56,57,58,59}
	// // b :=a[:]  //获取数组里面的所有值
	// // fmt.Printf("%v--%T",b,b)

	// c:=a[1:4] //左包右不包
	// fmt.Printf("%v---%T\n",c,c) //[56 57 58]
	// d:=a[2:]
	// fmt.Printf("%v--%T\n",d,d)
	// e :=a[:3]  //表示获取第三个下标前面的数据
	// fmt.Printf("%v---%T",e,e)


	// 基于切片的切片
	// a:=[]string{"北京","上海","广州","深圳","重庆","成都"}
	// b:=a[1:]
	// fmt.Printf("%v---%T\n",b,b)
	// 切片的长度和容量
	// 切片的长度就是他所包含的元素个数
	// 容量
	// s:=[]int{2,3,5,7,11,13}
	// fmt.Printf("长度%d 容量为%d\n",len(s),cap(s)) //长度为6 容量为6
	// a:=s[2:]
	// fmt.Printf("长度%d  容量为%d\n",len(a),cap(a))
	// b :=s[1:3]
	// fmt.Printf("长度%d  容量%d\n",len(b),cap(b))//2 5

	// 切片的本质
	// a :=[8]int{0,1,2,3,4,5,6,7}
	// s1 :=a[:5]
	// fmt.Printf("s1的长度为%d  容量为%d",len(s1),cap(s1))
	
	// 通过make函数
	// make(([]T,size,cap))
	// var sliceA = make([]int,4,8)
	// fmt.Println("%v----%T",len(sliceA),cap(sliceA))
	// 切片的修改
	// var sliceA = make([]int,4,8)
	// sliceA[0]=10
	// sliceA[1]=12
	// sliceA[2]=40
	// sliceA[3]=30

	// fmt.Println(sliceA)

	// sliceB :=[]string{"php","java","go"}
	// sliceB[2]="golang"
	// fmt.Println(sliceB)
	// golang中没法通过下标的方式给切片扩容
	// var  slicec []int
	// fmt.Printf("%v--%v--%v",slicec,len(slicec),cap(slicec))
	// slicec[0]=1
	// fmt.Println(slicec)
	// append()
	// var sliceA []int
	// sliceA =append(sliceA, 12)
	// fmt.Printf("%v--%v--%v",sliceA,len(sliceA),cap(sliceA))
	// append可以一次扩充多个数据
	// var sliceA []int
	// sliceA =append(sliceA, 12,23,35,456)
	// fmt.Printf("%v--%v--%v",sliceA,len(sliceA),cap(sliceA))
	// append方法还可以合并切片
	// var sliceA =[]string{"php","java"}
	// var sliceB =[]string{"node.js","golang"}
	// sliceA=append(sliceA, sliceB...)
	// fmt.Println(sliceA)

	// 切片的扩容策略
	// var sliceA []int
	// for i:=1;i<=10;i++{
	// 	sliceA=append(sliceA, i)
	// 	fmt.Printf("%v 长度:%d 容量%d\n",sliceA,len(sliceA),cap(sliceA))
	// }
	// 使用copy函数
	// 值类型
	// 引用类型
	// sliceA :=[]int{1,2,3,4,5}
	// sliceB :=sliceA
	// sliceB[0] =11
	// fmt.Println(sliceA)
	// fmt.Println(sliceB)

	// Copy函数复制切片
	// sliceA :=[]int{1,2,4,5,6}
	// sliceB :=make([]int,5,6)
	// copy(sliceB,sliceA)
	// fmt.Println(sliceA)
	// fmt.Println(sliceB)
	// sliceA[0]=111
	// fmt.Println(sliceA)
	// fmt.Println(sliceB)

	// 删除一个切片的值
	// a :=[]int{30,31,32,33,34,35,36,37}
	// // 要删除索引为2的元素  append合并切片的时候最后一个元素要加
	// a =append(a[:2],a[3:]...)
	// fmt.Println(a)
	// // 要删除35 36
	// sliceB :=[]int{30,31,32,33,34,35,36,37}
	// sliceB =append(sliceB[:5],sliceB[7:]...)
	// fmt.Printf("slice%d",sliceB)

	// 
	s2 :="你好golang"
	runeStr :=[]rune(s2)
	fmt.Println(runeStr)
	runeStr[0]='大'
	fmt.Println(string(runeStr))
}